package com.inspinia.auth.dao;

import com.inspinia.upms.common.model.resource.UpmsResource;
import com.inspinia.upms.common.model.role.UpmsRole;
import com.inspinia.upms.common.model.user.UpmsUser;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface AuthDao {
    /**
     * 用户名获取用户
     *
     * @param username
     * @param pwd
     * @return
     */
    UpmsUser findUser(@Param("username") String username, @Param("pwd") String pwd);
    /**
     * 根据用户名查找用户
     * @param username 用户名
     * @return
     */
    UpmsUser findByUserName(@Param("userName") String username);

    /**
     * 根据用户拥有的角色的id
     *
     * @param userId 用户id
     * @return
     */
    List<Long> findRoleIdsByUser(@Param("userId") Long userId);

    /**
     * 根据角色id查找角色
     *
     * @param roleIds 角色id集合
     * @return
     */
    List<UpmsRole> findRolesById(@Param("roleIds") List<Long> roleIds);

    /**
     * 查找角色拥有的url集合
     *
     * @param roleId
     * @param appName
     * @return
     */
    List<String> findResourcesByRole(@Param("roleId") Long roleId, @Param("appName") String appName);

    /**
     * 查找所有的菜单资源
     *
     * @return
     */
    List<UpmsResource> findAllMenu();

    /**
     * 查找角色拥有的所有菜单资源
     *
     * @param roleIds 角色id集合
     * @return
     */
    List<UpmsResource> findMenusByRole(@Param("roleIds") List<Long> roleIds);

    /**
     * 查找所有的子菜单
     *
     * @param rootId 根菜单id
     * @return
     */
    List<UpmsResource> findChildrenMenu(Long rootId);
    /**
     * 查找用户的状态
     *
     * @param userId 用户id
     * @return
     */
    Integer getUserStatus(long userId);

    /**
     * 根据用户id获取用户
     * @param userId
     * @return
     */
    UpmsUser findById(Long userId);

    /**
     * 查找用户的岗位id
     *
     * @param userId 用户id
     * @return
     */
    List<Long> findPostIdsByIdUser(@Param("userId") Long userId);

    /**
     * 根据岗位查找用户的资源url
     *
     * @param postIds 岗位id
     * @param appName
     * @return
     */
    List<String> findResourceUrlsByPostIds(@Param("postIds") List<Long> postIds, @Param("appName") String appName);
}
